#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
#include <string.h>;

typedef int HPDataType;

typedef struct Heap
{
    HPDataType *a;
    int capacity;
    int size;
} HP;

void HeapSort(HPDataType *a, int n);               // 堆排序
void HPInitArray(HP *php, HPDataType *a, int n);   // 数组建堆
void Swap(HPDataType *a, HPDataType *b);           // 数据交换函数
void AdjustUp(HPDataType *a, int child);           // 向上交换
void AdjustDown(HPDataType *a, int n, int parent); // 向下交换
// 堆的初始化
void HPInit(HP *php);
// 堆的销毁
void HPDestroy(HP *php);

// 插入数据
void HPPush(HP *php, HPDataType x);

HPDataType HPTop(HP *php); // 堆顶元素
// 删除堆顶元素
void HPPop(HP *php);
bool HPEmpty(HP *php);